package com.hose.biz;

import cn.hutool.core.io.file.PathUtil;
import cn.hutool.core.util.StrUtil;
import com.hose.util.ConfigUtils;
import com.hose.util.HoseUtils;
import com.microsoft.playwright.*;
import io.qameta.allure.Step;

import java.nio.file.Path;
import java.nio.file.Paths;

public class HoseLogin {
    /**
     * 原生登录
     * @param page
     * @param userName
     * @param password
     * @param enterpriseName 企业名称
     * @return
     */
    @Step("用户 {userName} 登录")
    public boolean webLogin(Page page, String userName, String password, String enterpriseName) {
        HoseUtils.wait(page);
        // Fill [placeholder="请输入您的注册手机号"]
        page.locator("[placeholder=\"请输入您的注册手机号\"]").fill(userName);
        // Fill [placeholder="请输入您的密码"]
        page.locator("[placeholder=\"请输入您的密码\"]").fill(password);
        // Click text=已阅读并同意
        page.locator("input[type=\"checkbox\"]").nth(1).check();
        // Click button:has-text("登 录")
        page.waitForNavigation(() -> {
            page.locator("button:has-text(\"登 录\")").click();
        });
        // Click span:has-text("【测试】2022原生UI自动化测试企业")
        page.locator(StrUtil.format("span:has-text('{}')", enterpriseName)).click();
        // Click button:has-text("进入企业")
        page.waitForNavigation(() -> {
            page.locator("button:has-text(\"进入企业\")").click();
        });
        HoseUtils.wait(page);
        // Click button:has-text("关 闭")
        page.locator("button:has-text(\"关 闭\")").click();
        // Click button:has-text("我知道了")
        page.locator("button:has-text(\"我知道了\")").click();
        HoseUtils.wait(page);
        // 获取当前路径，并保存session文件
        String sessionFileName = StrUtil.format("./{}_auth.json", userName);
        Path path = Paths.get(sessionFileName);
        // 如果存在则先删除
        if (PathUtil.exists(path, true)) {
            PathUtil.del(path);
        }
        BrowserContext.StorageStateOptions storageStateOptions = new BrowserContext.StorageStateOptions();
        storageStateOptions.setPath(path);
        page.context().storageState(storageStateOptions);
        return true;
    }

    /**
     * 原生登录 并保存Session文件
     * @param userName
     * @param password
     * @param browser
     * @return
     */
    @Step("用户 {userName} 登录并创建共用Session")
    public boolean webLoginAndSaveSession(Browser browser, String userName, String password, String baseUrl, String enterprise) {
        // 第一用户登录，并保存session
        BrowserContext newContext = HoseUtils.createContext(browser, null, null);
        Page newPage = newContext.newPage();
        newPage.navigate(baseUrl);
        this.webLogin(newPage, userName, password, enterprise);
        newContext.close();
        return true;
    }

    public boolean dingdingLogin() {
        return true;
    }

    public boolean weiXinLogin() {
        return true;
    }
}
